/**
 * 背包管理器
 * 负责管理用户背包中的物品
 */

class BackpackManager {
  constructor() {
    this.storageKey = 'user_backpack'
    this.defaultItems = []
  }

  /**
   * 获取背包中的所有物品
   */
  getAllItems() {
    try {
      const items = uni.getStorageSync(this.storageKey)
      return items || this.defaultItems
    } catch (error) {
      console.error('获取背包数据失败:', error)
      return this.defaultItems
    }
  }

  /**
   * 保存背包数据
   */
  saveItems(items) {
    try {
      uni.setStorageSync(this.storageKey, items)
      return true
    } catch (error) {
      console.error('保存背包数据失败:', error)
      return false
    }
  }

  /**
   * 添加物品到背包
   */
  addItem(item) {
    const items = this.getAllItems()
    
    // 改为按物品名称查找，而不是ID
    const existingItem = items.find(i => i.name === item.name)
    
    if (existingItem) {
      // 如果物品已存在（相同名称），增加数量
      existingItem.quantity += item.quantity || 1
    } else {
      // 如果物品不存在，添加新物品，使用时间戳作为唯一ID
      const newItem = {
        ...item,
        id: Date.now() + Math.random(), // 使用时间戳+随机数确保唯一性
        quantity: item.quantity || 1
      }
      items.push(newItem)
    }
    
    return this.saveItems(items)
  }

  /**
   * 移除物品
   */
  removeItem(itemId, quantity = 1) {
    const items = this.getAllItems()
    const itemIndex = items.findIndex(i => i.id === itemId)
    
    if (itemIndex === -1) {
      return false
    }
    
    const item = items[itemIndex]
    
    if (item.quantity <= quantity) {
      // 如果数量不足或刚好用完，移除物品
      items.splice(itemIndex, 1)
    } else {
      // 减少数量
      item.quantity -= quantity
    }
    
    return this.saveItems(items)
  }

  /**
   * 使用物品
   */
  useItem(itemId, quantity = 1) {
    const items = this.getAllItems()
    const item = items.find(i => i.id === itemId)
    
    if (!item) {
      return false
    }
    
    // 如果是抽奖券，跳转到抽奖页面
    if (item.type === 'lottery') {
      uni.navigateTo({
        url: '/pages/lottery/lottery?useTicket=true'
      })
      return true
    }
    
    // 其他物品直接移除
    return this.removeItem(itemId, quantity)
  }

  /**
   * 出售物品
   */
  sellItem(itemId, quantity = 1) {
    const items = this.getAllItems()
    const item = items.find(i => i.id === itemId)
    
    if (!item) {
      return { success: false, points: 0 }
    }
    
    const sellPrice = Math.floor(item.price * 0.5) // 出售价格为购买价格的50%
    const totalPoints = sellPrice * quantity
    
    const success = this.removeItem(itemId, quantity)
    
    return {
      success,
      points: totalPoints,
      itemName: item.name
    }
  }

  /**
   * 获取指定类型的物品
   */
  getItemsByType(type) {
    const items = this.getAllItems()
    if (type === 'all') {
      return items
    }
    return items.filter(item => item.type === type)
  }

  /**
   * 获取物品总数
   */
  getTotalItemCount() {
    const items = this.getAllItems()
    return items.reduce((total, item) => total + item.quantity, 0)
  }

  /**
   * 检查物品是否存在
   */
  hasItem(itemId) {
    const items = this.getAllItems()
    return items.some(item => item.id === itemId)
  }

  /**
   * 获取物品数量
   */
  getItemQuantity(itemId) {
    const items = this.getAllItems()
    const item = items.find(i => i.id === itemId)
    return item ? item.quantity : 0
  }

  /**
   * 清空背包
   */
  clearBackpack() {
    return this.saveItems([])
  }
  
  /**
   * 清理重复物品（按名称合并）
   */
  cleanDuplicateItems() {
    const items = this.getAllItems()
    const uniqueItems = []
    const itemMap = new Map()
    
    items.forEach(item => {
      if (itemMap.has(item.name)) {
        // 如果已存在相同名称的物品，合并数量
        const existingItem = itemMap.get(item.name)
        existingItem.quantity += item.quantity || 1
      } else {
        // 如果不存在，添加新物品
        const newItem = {
          ...item,
          id: Date.now() + Math.random() // 重新生成唯一ID
        }
        itemMap.set(item.name, newItem)
        uniqueItems.push(newItem)
      }
    })
    
    return this.saveItems(uniqueItems)
  }

  /**
   * 初始化背包数据（用于测试）
   */
  initTestData() {
    const testItems = [
      {
        id: 1,
        name: '传说级激光剑',
        icon: '⚔️',
        type: 'weapon',
        typeText: '武器',
        description: '散发神秘光芒的传说武器，攻击力+50',
        quantity: 1,
        price: 500,
        canUse: false,
        canSell: true
      },
      {
        id: 2,
        name: '星空皮肤包',
        icon: '🎨',
        type: 'skin',
        typeText: '皮肤',
        description: '包含10款星空主题皮肤，让你的角色闪闪发光',
        quantity: 1,
        price: 300,
        canUse: false,
        canSell: true
      },
      {
        id: 3,
        name: '能量护盾',
        icon: '💎',
        type: 'prop',
        typeText: '道具',
        description: '提供额外防护，减少受到的伤害',
        quantity: 2,
        price: 200,
        canUse: true,
        canSell: true
      },
      {
        id: 4,
        name: '神秘盲盒',
        icon: '📦',
        type: 'blindbox',
        typeText: '盲盒',
        description: '随机获得稀有道具，可能开出传说级装备！',
        quantity: 3,
        price: 100,
        canUse: true,
        canSell: true
      },
      {
        id: 5,
        name: '幸运抽奖券',
        icon: '🎰',
        type: 'lottery',
        typeText: '抽奖',
        description: '参与幸运大转盘，有机会获得价值1000积分的道具',
        quantity: 5,
        price: 50,
        canUse: true,
        canSell: true
      },
      {
        id: 6,
        name: '机械龙宠物',
        icon: '🐾',
        type: 'pet',
        typeText: '宠物',
        description: '忠诚的机械伙伴，战斗中提供额外支援',
        quantity: 1,
        price: 800,
        canUse: false,
        canSell: true
      },
      {
        id: 7,
        name: '超音速跑车',
        icon: '🚗',
        type: 'vehicle',
        typeText: '载具',
        description: '炫酷的载具，让你在赛道上所向披靡',
        quantity: 1,
        price: 600,
        canUse: false,
        canSell: true
      }
    ]
    
    return this.saveItems(testItems)
  }
}

// 创建单例实例
const backpackManager = new BackpackManager()

export default backpackManager
